package com.exwave.socialgame.model_user.service;

import com.exwave.socialgame.model_user.dao.SignDao;
import com.exwave.socialgame.model_user.dao.UserDao;
import com.exwave.socialgame.model_user.entity.User;
import com.exwave.socialgame.myutils.ReturnUtils;
import com.mysql.jdbc.StringUtils;

import org.springframework.stereotype.Service;

import java.util.List;

import javax.annotation.Resource;

/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2021-10-19 16:12:46
 */
@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;
    @Resource
    private SignDao signDao;



    /**
     * 通过TEl查询单条数据
     *
     * @param tel 主键
     * @return 实例对象
     */
    @Override
    public User queryByTel(String tel) {

        User user = this.userDao.queryByTel(tel);
        ReturnUtils.isObjNull(user, "用户不存在");
        return user;
    }

    /**
     * 通过UID查询单条数据
     *
     * @param uid 主键
     * @return 实例对象
     */
    @Override
    public User queryById(int uid) {
        User user = this.userDao.queryById(uid);
        ReturnUtils.isObjNull(user, "用户不存在");
        return user;
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<User> queryAllByLimit(int offset, int limit) {
        return this.userDao.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public User insert(User user) {
        ReturnUtils.isTrue(StringUtils.isNullOrEmpty(user.getUname()), "昵称不能为空");
        ReturnUtils.isTrue(StringUtils.isNullOrEmpty(user.getUtel()), "电话不能为空");
        ReturnUtils.isTrue(StringUtils.isNullOrEmpty(user.getUpassword()), "密码不能为空");
        ReturnUtils.stringissum(user.getUtel(), user.getUpassword(), "账户密码不能相同");
        ReturnUtils.isTrue(this.userDao.queryByTel(user.getUtel()) != null, "用户已经存在");

        user.setUlevel(1);
        user.setUexp(0);
        user.setUpersonality("There is nothing"); //初始化个性签名
        this.userDao.insert(user);
        return user;
    }

    /**
     * 修改用户信息
     *
     * @param user 实例对象
     * @return 实例对象
     */
    @Override
    public User update(User user) {
        ReturnUtils.isIdNull(user.getUid(), "uid不能为空");
//        AssertUtil.isTrue(StringUtils.isNullOrEmpty(user.getUname()), "昵称不能为空");
//        AssertUtil.isTrue(StringUtils.isNullOrEmpty(user.getUsex()), "性别不能为空");
        User temp = this.userDao.queryById(user.getUid());
        ReturnUtils.isObjNull(temp, "用户不存在");
        //更新信息
        this.userDao.update(user);
        return this.userDao.queryById(user.getUid());
    }

    /**
     * 删除用户信息
     * 首先根据提供的uid查询该账户的tel,与提供的tel比较，判断用户信息匹配与否
     * 然后根据提供的uid查询该账户的password，判断账户密码正确与否
     * 全部正确则开始操作
     *
     * @param user 用户
     * @return 是否成功
     */
    @Override
    public boolean deleteByUser(User user) {
        User temp = this.userDao.queryById(user.getUid());
        ReturnUtils.isTrue(!(user.getUid() == temp.getUid()), "用户信息不匹配");
        ReturnUtils.isTrue(!user.getUpassword().equals(temp.getUpassword()), "账户密码不匹配");
        return this.userDao.deleteById(user.getUid()) > 0;
    }
}